home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / asm32.zip / MULTIWIN.DOC < prev    next >
Text File  |  1995-09-06  |  20KB  |  679 lines

  1.  
  2. ************************  MULTI-WINDOW SUBSYSTEM  ****************************
  3.  
  4. ASM32 Multi-Window text mode video subroutines
  5. Copyright (C) 1993 - 1995 Douglas Herr ■ All rights reserved
  6.  
  7. ASM32's multi-window system allows several pop-up windows to be stored
  8. at any given time, and permits any one window or any group of overlapping
  9. or non-overlapping windows to be displayed on the screen in any position
  10. and in any order.  Pop-up windows may be created, printed to, cleared or
  11. moved whether displayed or hidden.  Up to 10 pop-up windows may be open at
  12. any time.  To change the maximum number of windows available, change
  13. mwindow_count in MWINIT.ASM an re-assemble.
  14.  
  15. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  16.  
  17. MWBORDER:    puts single- or double-lined border, or character border,
  18.              around an open window; sets border flag.
  19.              The Multi-Window border flag prevents MWClear, MWFill, MWPrint
  20.              and MWCenter from over-writing the border for the selected
  21.              window.
  22. Source:      mwborder.asm (mwinit.asm)
  23.  
  24. Call with:   EBX = window handle
  25.              AH = border color attribute
  26.              AL = border type: -1 = double line
  27.                                 0 = single line
  28.                     1 through 254 = ASCII character
  29. Returns:     if CF = 0, no error
  30.              if CF = 1, handle not valid or window dimensions too small
  31. Uses:        flags
  32. Example:
  33.  
  34. include model.inc
  35.  
  36. extrn   mwinit:near, mwopen:near, mwborder:near
  37.  
  38. include dataseg.inc
  39. whandle dd 0
  40. wdata   dw 0,0,19,39            ; 20 rows, 40 columns
  41. @curseg ends
  42.  
  43. include codeseg.inc
  44.         .
  45.         .
  46.         .
  47.         call    mwinit
  48.         lea     ebx,wdata       ; point to window corner data
  49.         call    mwopen          ; open window in multi-window system
  50.         jc      problem         ; if error, go take care of it
  51.         mov     whandle,eax     ;  else save window handle
  52.  
  53. ; give the window a single-lined border in red
  54.         mov     ebx,eax         ; handle in EBX
  55.         mov     al,0
  56.         mov     ah,12
  57.         call    mwborder
  58.  
  59. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  60.  
  61. MWCENTER:    centers a string in selected window
  62. Source:      mwcenter.asm (mwprint.asm, mwinit.asm)
  63.  
  64. Call with:   EBX = window handle
  65.              DS:[ESI] -> ASCIIZ string
  66.              DH = window row
  67.              AH = color attribute
  68. Returns:     DL = window column used by MWPrint
  69. Uses:        AL, DL, flags
  70.  
  71. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  72.  
  73. MWCLEAR:     clears a window managed by the MultiWindow system
  74. source:      mwclear.asm (mwinit.asm)
  75.  
  76. Call with:   EBX = window handle
  77.              AH = color attribute
  78.              if the window's border is enabled, it is not cleared
  79. Returns:     nothing
  80. Uses:        AX, flags
  81. Example:     see example for MWNoBorder
  82.  
  83.  
  84.  
  85. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  86.  
  87. MWCLOSE:     releases a window's memory buffer
  88. Source:      mwinit.asm
  89.  
  90. Call with:   EBX = valid window handle
  91. Returns:     if CF = 0, no error
  92.              if CF = 1, bad handle
  93. Uses:        flags
  94. Example:
  95.  
  96. include model.inc
  97.  
  98. extrn   mwtop:near, mwclose:near
  99.  
  100. include codeseg.inc
  101.         .
  102.         .
  103.         .
  104.  
  105.         mov    ebx,window_handle
  106. ; all done with this window
  107. ; first I want to move it to the top of the window "stack"
  108. ; so the next window I open will be on top
  109.  
  110.         call   mwtop
  111.  
  112. ; then get rid of it
  113.         call   mwclose
  114.  
  115.  
  116. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  117.  
  118. MWCLOSEALL   close all open windows, releasing buffers
  119. Source:      mwclose.asm (mwinit.asm)
  120.  
  121. Call with:   no parameters
  122. Returns:     nothing
  123. Uses:        nothing; all registers and flags are saved
  124. Example:
  125.  
  126.         call   mwcloseall
  127.  
  128.  
  129. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  130.  
  131. MWDEFAULT:   change default status of opened windows
  132. Source:      mwdef.asm (mwinit.asm)
  133.  
  134. Call with:   AL = option bits
  135.               bit 0  if zero, hide windows
  136.                      if one, display window
  137.               bit 2  if zero, no shadow
  138.                      if one, shadow enabled
  139.              MWDefault affects only windows opened AFTER MWDefault is called.
  140.              Does not change the status of previously-opened windows.
  141. Returns:     nothing
  142. Uses:        AL
  143. Example:
  144.  
  145. include model.inc
  146.  
  147. extrn   mwinit:near, mwopen:near
  148. extrn   mwdefault:near
  149.  
  150. include codeseg.inc
  151.         .
  152.         .
  153.         .
  154.         call    mwinit
  155.         mov     al,101b            ; all windows with shadow and unhidden
  156.         call    mwdefault          ; update defaults
  157.  
  158. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  159.  
  160. MWFILL:      fills a window managed by the MultiWindow system
  161. source:      mwclear.asm (mwinit.asm)
  162.  
  163. Call with:   EBX = window handle
  164.              AH = color attribute
  165.              AL = fill character
  166.              if the window's border is enabled, it is not changed
  167. Returns:     nothing
  168. Uses:        AX, flags
  169. Example:     see example for MWNoBorder
  170.  
  171. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  172.  
  173. MWDISPLAY:   display open windows on the screen
  174. Source:      mwinit.asm
  175.  
  176. Call with:   no parameters
  177.              MWDisplay updates the screen by displaying all unhidden
  178.              open windows.  No windows will ever show up on the screen
  179.              if you don't call MWDisplay.  You must call MWInit before
  180.              using MWDisplay.
  181. Returns:     nothing
  182. Uses:        nothing
  183. Example:     see example code for MWPrint
  184.  
  185.  
  186.  
  187. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  188.  
  189. MWHIDE:      hide selected window
  190.              a "hidden" window is ignored by MWDISPLAY
  191. Source:      mwinit.asm
  192.  
  193. Call with:   EBX = window handle
  194. Returns:     if CF = 0, no error
  195.              if CF = 1, bad handle number
  196. Uses:        flags
  197. Example:
  198.  
  199. include model.inc
  200.  
  201. extrn   mwinit:near, mwopen:near, mwhide:near
  202.  
  203. include dataseg.inc
  204. whandle dd 0
  205. wdata   dw 0,0,19,39           ; 20 rows, 40 columns
  206. @curseg ends
  207.  
  208. include codeseg.inc
  209.         .
  210.         .
  211.         .
  212.         call   mwinit
  213.         lea    ebx,wdata       ; point to window corner data
  214.         call   mwopen          ; open window in multi-window system
  215.         jc     problem         ; if error, go take care of it
  216.         mov    whandle,eax     ;  else save window handle
  217.         mov    ebx,eax         ; copy handle to EBX
  218.         call   mwhide          ; don't display window when MWDisplay is called
  219.  
  220.  
  221.  
  222. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  223.  
  224. MWHIDEALL:   hide all open windows
  225. Source:      mwhide.asm (mwinit.asm)
  226.  
  227. Call with:   no parameters
  228. Returns:     nothing
  229. Uses:        nothing
  230. Example:
  231.  
  232. include model.inc
  233.  
  234. extrn   mwinit:near, mwhideall:near
  235. extrn   mwopen:near, mwdisplay:near
  236.  
  237. include codeseg.inc
  238.         call    mwinit
  239.  
  240. ; program opens several windows
  241.         .
  242.         .
  243.         .
  244.  
  245. ; make all open windows disappear
  246.         call    mwhideall
  247.         call    mwdisplay
  248.  
  249.  
  250.  
  251. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  252.  
  253. MWINIT:      initializes multi-window system.  Several pop-up windows may
  254.              be popped onto or removed from a base screen in any order.
  255.              You must re-initialize the multi-window system each time the
  256.              base screen changes.  MWInit does not affect any open windows.
  257. Source:      mwinit.asm (screen.asm, smem.asm)
  258.  
  259. Call with:   no parameters
  260. Returns:     EAX = near address of saved base screen
  261. Uses:        EAX
  262. Example:
  263.  
  264. include model.inc
  265.  
  266. extrn   mwinit:near
  267.  
  268. include codeseg.inc
  269.         .
  270.         .
  271.         call   mwinit
  272.  
  273. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  274.  
  275. MWNOBORDER:  clears the border flag for the associated window
  276. Source:      mwborder.asm (mwinit.asm)
  277.  
  278. Call with:   EBX = window handle
  279. Returns:     if CF = 0, no error
  280.              if CF = 1, bad handle number
  281. Uses:        flags
  282. Example:
  283.  
  284. include model.inc
  285.  
  286. extrn   mwinit:near, mwopen:near
  287. extrn   mwborder:near, mwnoborder:near
  288. extrn   mwclear:near
  289.  
  290. include dataseg.inc
  291. window_handle dd 0
  292. wdata         dw 0,0,19,39            ; 20 rows, 40 columns
  293. @curseg ends
  294.  
  295. include codeseg.inc
  296.         .
  297.         .
  298.         .
  299.         call    mwinit
  300.         lea     ebx,wdata          ; point to window corner data
  301.         call    mwopen             ; open window in multi-window system
  302.         jc      problem            ; if error, go take care of it
  303.         mov     window_handle,eax  ;  else save window handle
  304.  
  305. ; give the window a single-lined border in red
  306.         mov     ebx,eax            ; handle in EBX
  307.         mov     al,0
  308.         mov     ah,12
  309.         call    mwborder
  310.         .
  311.         .
  312.  
  313. ; some time later, I want to clear the ENTIRE window, including the border
  314.         mov     ebx,window_handle
  315.         call    mwnoborder
  316.         mov     ah,any_old_color
  317.         call    mwclear
  318.  
  319.  
  320. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  321.  
  322. MWNOSHADOW:  disables "shadow" effect for selected window
  323. Source:      mwshadow.asm (mwinit.asm)
  324.  
  325. Call with:   EBX = window handle
  326. Returns:     if CF = 0, no error
  327.              if CF = 1, bad handle number
  328. Uses:        flags
  329. Example:
  330.  
  331. include model.inc
  332.  
  333. extrn   mwinit:near, mwopen:near, mwnoshadow:near
  334.  
  335. include dataseg.inc
  336. whandle dd 0
  337. wdata   dw 0,0,19,39           ; 20 rows, 40 columns
  338. @curseg ends
  339.  
  340. include codeseg.inc
  341.         .
  342.         .
  343.         .
  344.         call   mwinit
  345.         lea    ebx,wdata       ; point to window corner data
  346.         call   mwopen          ; open window in multi-window system
  347.         jc     problem         ; if error, go take care of it
  348.         mov    whandle,eax     ;  else save window handle
  349.         mov    ebx,eax         ; copy handle to EBX
  350.         call   mwnoshadow      ; disable shadow for this window
  351.  
  352.  
  353.  
  354. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  355.  
  356. MWOPEN:      opens a pop-up window for subsequent display
  357. Source:      mwinit.asm (screen.asm, smem.asm)
  358.  
  359. Call with:   DS:[EBX] pointing to window corner data
  360.  
  361.              Up to 10 windows may be open at any time; if you need more,
  362.              you will need to change MWINDOW_COUNT in mwinit.asm and
  363.              re-assemble.  If two or more windows overlap on the screen,
  364.              the one opened last will be displayed on top of the other(s).
  365.              The window appearing on top may be changed with MWTop.
  366.  
  367.              Note the default status of all opened windows:
  368.                hidden
  369.                no shadow
  370.                no border
  371.  
  372.              You may change the status of any open window with
  373.              MWUnHide, MWHide, MWShadow, MWNoShadow, MWBorder and MWNoBorder;
  374.  
  375.              All open windows may be hidden or un-hidden with
  376.              MWHideAll or MWUnHideAll;
  377.  
  378.              The default status of newly-opened windows may be changed
  379.              with MWDefault.
  380.  
  381. Returns:     if CF = 0, EAX = multi-window handle
  382.              if CF = 1, insufficient memory for window
  383. Uses:        AX, flags
  384. Example:
  385.  
  386. include model.inc
  387.  
  388. extrn   mwinit:near, mwopen:near
  389.  
  390. include dataseg.inc
  391. whandle dd 0
  392. wdata   dw 0,0,19,39           ; 20 rows, 40 columns
  393.                                ; upper left corner of screen
  394. @curseg ends
  395.  
  396. include codeseg.inc
  397.         .
  398.         .
  399.         .
  400.         call   mwinit
  401.         lea    ebx,wdata       ; point to window corner data
  402.         call   mwopen          ; open window in multi-window system
  403.         jc     problem         ; if error, go take care of it
  404.         mov    whandle,eax     ;  else save window handle
  405.  
  406.  
  407. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  408.  
  409. MWPRINT:     print an ASCIIZ string to an open window
  410. Source:      mwprint.asm (mwinit.asm)
  411.  
  412. Call with:   EBX = window handle
  413.              DS:[ESI] pointing to an ASCIIZ string
  414.              AH = color attribute
  415.              DH = window row, DL = window column
  416. Returns:     nothing
  417. Uses:        AL
  418. Example:
  419.  
  420. include  model.inc
  421.  
  422. extrn   mwinit:near, mwopen:near
  423. extrn   mwprint:near, mwdisplay:near
  424.  
  425. include dataseg.inc
  426. window_handle dd 0
  427. wdata         dw 0,0,19,39            ; 20 rows, 40 columns
  428. row           db 1
  429. column        db 1
  430. color         db 23
  431. window_string db 'Print this in the window',0
  432. @curseg ends
  433.  
  434. include codeseg.inc
  435.         .
  436.         .
  437.         .
  438.         call    mwinit
  439.         lea     ebx,wdata          ; point to window corner data
  440.         call    mwopen             ; open window in multi-window system
  441.         jc      problem            ; if error, go take care of it
  442.         mov     window_handle,eax  ;  else save window handle
  443.  
  444.         lea     esi,window_string  ; point to text
  445.         mov     ebx,eax            ; EAX is still the handle
  446.         mov     dh,row             ; offset from top of window
  447.         mov     dl,column          ; offset from left side of window
  448.                                    ; ROW and COLUMN are relative to BORDER
  449.                                    ; if border is enabled
  450.         mov     ah,color
  451.         call    mwprint
  452.         call    mwdisplay          ; show all unhidden windows on the screen
  453.  
  454.  
  455.  
  456. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  457.  
  458. MWPRINTCE:   prints a string in selected window & clears to edge of window
  459.              clears to border if the window's border is enabled
  460. Source:      mwprint.asm (mwinit.asm)
  461.  
  462. Call with:   EBX = window handle
  463.              DS:[ESI] pointing to an ASCIIZ string
  464.              AH = color attribute
  465.              DH = window row, DL = window column
  466. Returns:     nothing
  467. Uses:        AL
  468. Example:     see MWPrint
  469.  
  470.  
  471. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  472.  
  473. MWSELECT:    determines which window is visible at screen coordinate
  474. Source:      mwselect.asm (mwinit.asm)
  475.  
  476. Call with:   DH = screen row, DL = screen column
  477. Returns:     if CF = 0, EBX = handle of window visible at these coordinates
  478.              if CF = 1, no window visible at these coordinates
  479. Uses:        EBX, flags
  480. Example:
  481.  
  482. include model.inc
  483.  
  484. extrn   mwselect:near, mwtop:near
  485.  
  486. include codeseg.inc
  487.         .
  488.         .
  489.         .
  490.  
  491. ; the mouse has been scurrying around the screen
  492. ; and the program has detected a mouse button press
  493. ; the mouse cursor is at row 3, column 14
  494.  
  495. ; determine which window the mouse has landed on
  496.         mov     dh,3
  497.         mov     dl,14
  498.         call    mwselect              ; get window visible at (3,14)
  499.         jc      no_window             ;  error? mouse must have had an itch
  500.         call    mwtop                 ; put this window on top of all others
  501.  
  502.  
  503. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  504.  
  505. MWSHADOW:    enables "shadow" effect for selected window
  506. Source:      mwshadow.asm (mwinit.asm)
  507.  
  508. Call with:   EBX = window handle
  509. Returns:     if CF = 0, no error
  510.              if CF = 1, bad handle
  511. Uses:        flags
  512. Example:
  513.  
  514. include model.inc
  515.  
  516. extrn   mwinit:near, mwopen:near, mwshadow:near
  517.  
  518. include dataseg.inc
  519. whandle dd 0
  520. wdata   dw 0,0,19,39           ; 20 rows, 40 columns
  521. @curseg ends
  522.  
  523. include codeseg.inc
  524.         .
  525.         .
  526.         .
  527.         call   mwinit
  528.         lea    ebx,wdata       ; point to window corner data
  529.         call   mwopen          ; open window in multi-window system
  530.         jc     problem         ; if error, go take care of it
  531.         mov    whandle,eax     ;  else save window handle
  532.         mov    ebx,eax         ; copy handle to EBX
  533.         call   mwshadow        ; enable shadow for this window
  534.  
  535.  
  536. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  537.  
  538. MWTITLE:     center an ASCIIZ string at the top of an open window
  539. Source:      mwtitle.asm (mwcenter.asm, mwinit.asm)
  540.  
  541. Call with:   EBX = window handle
  542.              DS:[ESI] pointing to an ASCIIZ string
  543.              AH = color attribute
  544.              MWTitle prints the window title at the top of the window,
  545.              overwriting the border (if it is enabled).
  546. Returns:     nothing
  547. Uses:        AL
  548. Example:
  549.  
  550. include  model.inc
  551.  
  552. extrn   mwinit:near, mwopen:near
  553. extrn   mwtitle:near, mwdisplay:near
  554.  
  555. include dataseg.inc
  556. window_handle dd 0
  557. wdata         dw 0,0,19,39            ; 20 rows, 40 columns
  558. row           db 1
  559. column        db 1
  560. color         db 23
  561. window_string db 'Window Title',0
  562. @curseg ends
  563.  
  564. include codeseg.inc
  565.         .
  566.         .
  567.         .
  568.         call    mwinit
  569.         lea     ebx,wdata          ; point to window corner data
  570.         call    mwopen             ; open window in multi-window system
  571.         jc      problem            ; if error, go take care of it
  572.         mov     window_handle,eax  ;  else save window handle
  573.  
  574.         lea     esi,window_string  ; point to text
  575.         mov     ebx,eax            ; EAX is still the handle
  576.         mov     ah,color
  577.         call    mwtitle
  578.         call    mwdisplay          ; show all unhidden windows on the screen
  579.  
  580.  
  581.  
  582. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  583.  
  584. MWTOP:       displays selected window on top of all others
  585. Source:      mwtop.asm (mwinit.asm)
  586.  
  587. Call with:   EBX = window handle
  588. Returns:     DF = 0
  589.              if CF = 0, no error
  590.              if CF = 1, bad handle number
  591. Uses:        flags
  592. Example:
  593.  
  594. include model.inc
  595.  
  596. extrn   mwselect:near, mwtop:near
  597.  
  598. include codeseg.inc
  599.         .
  600.         .
  601.         .
  602.  
  603. ; the mouse has been scurrying around the screen
  604. ; and the program has detected a mouse button press
  605. ; the mouse cursor is at row 3, column 14
  606.  
  607. ; determine which window the mouse has landed on
  608.         mov     dh,3
  609.         mov     dl,14
  610.         call    mwselect              ; get window visible at (3,14)
  611.         jc      no_window             ;  error? mouse must have had an itch
  612.         call    mwtop                 ; put this window on top of all others
  613.  
  614.  
  615. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  616.  
  617. MWUNHIDE:    allow selected window to be displayed
  618. Source:      mwinit.asm
  619.  
  620. Call with:   EBX = window handle
  621. Returns:     if CF = 0, no error
  622.              if CF = 1, bad handle number
  623. Uses:        flags
  624. Example:
  625.  
  626. include model.inc
  627.  
  628. extrn   mwinit:near, mwopen:near, mwunhide:near
  629.  
  630. include dataseg.inc
  631. whandle dd 0
  632. wdata   dw 0,0,19,39           ; 20 rows, 40 columns
  633. @curseg ends
  634.  
  635. include codeseg.inc
  636.         .
  637.         .
  638.         .
  639.         call   mwinit
  640.         lea    ebx,wdata       ; point to window corner data
  641.         call   mwopen          ; open window in multi-window system
  642.         jc     problem         ; if error, go take care of it
  643.         mov    whandle,eax     ;  else save window handle
  644.         mov    ebx,eax         ; copy handle to EBX
  645.         call   mwunhide        ; display window when MWDisplay is called
  646.  
  647.  
  648.  
  649. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  650.  
  651. MWUNHIDEALL: unhide all open windows
  652. Source:      mwunhide.asm (mwinit.asm)
  653.  
  654. Call with:   no parameters
  655. Returns:     nothing
  656. Uses:        nothing
  657. Example:
  658.  
  659. include model.inc
  660.  
  661. extrn   mwinit:near, mwunhideall:near
  662. extrn   mwopen:near, mwdisplay:near
  663.  
  664. include codeseg.inc
  665.         .
  666.         call    mwinit
  667.         .
  668. ; program opens several windows
  669.         .
  670.         .
  671.         .
  672.  
  673. ; make all open windows visible
  674.         call    mwunhideall
  675.         call    mwdisplay
  676.  
  677.  
  678.  
  679.